#include "template.h"

// 1. C++ 98/03 类型别名
// typedef unsigned int uint_t;
// typedef std::map<std::string, int> stu;

// 上述看起来没有问题，我们定义了一个新的类型std, 但是发现stu的key, value类型都是固定的
// 如果我们想要其中一个不固定，应该如何处理?

// 1. C++98/03做法
template<typename Key> 
struct Stu {
    typedef std::map<Key, int> type;
};
typedef Stu<std::string>::type stu1;


// C++11的做法
template<typename Key>
using stu2 = std::map<Key, int>;


//////////////////////////////////////////
// 2. 函数指针
// typedef void(*func_t)(int, int);
// using func_t = void(*)(int, int);


//////////////////////////////////////////
// 3. 模板默认参数

// C++ 98/03不支持函模板默认参数(类可以)，C++11解除了该限制
template<typename T = int>
void fun(void) {
    // code here
}


int template_using(void) {


    return 0;
}